使用OpenStack部署的虚拟机,其中只有一块盘,但是docker的btrfs需要一个单独的设备,如果OpenStack没有Cinder服务,
还要手动加盘,实在有点麻烦,作为实验来说有点不便。那么怎么绕过去呢,很简单,使用全能的loop device,具体如下:
- 创建一个空的image文件(9.6G)
1 | dd if=/dev/zero of=btrfs.img bs=512 count=20000000 |
- 建立loop,操作来为mount准备
1 | losetup /dev/loop0 btrfs.img |
- 安装btrfs tools
1 | sudo apt-get install btrfs-tools |
- 创建btrfs存储池
1 | sudo mkfs.btrfs -f /dev/loop0 |
- 创建docker使用的文件目录
1 | sudo mkdir -p /var/lib/docker |
- 获取btrfs文件系统的UUID
1 | sudo blkid /dev/loop |
- 创建对应的/etc/fstab项目,使得可以系统启动时可以自动挂载
1 | /dev/loop0 /var/lib/docker btrfs defaults 0 0 |
- 挂载上面的新的文件系统
1 | sudo mount -a |
- 重启docker
1 | sudo service docker start |
这样就完成btrfs storage driver配置完成。
后面我们想做一个实验,想获取btrfs文件的Magic Number : 9123683e
1 | docker run --rm -it -v "$PWD":/usr/src/mygo -w /usr/src/mygo -v /var/lib/docker:/var/lib/docker golang bash |
1 | // mygo/main.go |
在容器中运行程序,可以得到结果:
2016/02/02 13:38:46 Args are :[mygo]
The type is 9123683e
参考资料:
http://wiki.osdev.org/Loopback_Device
https://www.howtoforge.com/a-beginners-guide-to-btrfs
https://github.com/docker/docker/blob/master/docs/userguide/storagedriver/btrfs-driver.md